import vnode from './vnode.js'; //数据生产虚拟节点里面包括sel, data, children, text, elm, key
import createElement from './createElement.js'; //将虚拟dom生成dom节点
import patchVnode from './patchVnode.js' 
export default function patch(oldVnode, newVnode) {
    // 判断传入的第一个参数，是DOM节点还是虚拟节点？ 因为第一次上树是dom节点，修改时是要和旧节点
    if (oldVnode.sel == '' || oldVnode.sel == undefined) {
        // 传入的第一个参数是DOM节点，此时要包装为虚拟节点
        oldVnode = vnode(oldVnode.tagName.toLowerCase(), {}, [], undefined, oldVnode);
    }
    // 判断oldVnode和newVnode是不是同一个节点
    if (oldVnode.key == newVnode.key && oldVnode.sel == newVnode.sel) {
        console.log('是同一个节点');
        patchVnode(oldVnode, newVnode);
    } else {
        let newVnodeElm = createElement(newVnode);
        console.log(newVnodeElm,'不是同一个节点，暴力插入新的，删除旧的');
        // 插入到老节点之前 先插入后删除的原因是插入时要有标杆，讲明白一点要找到某个地方插入
        console.log(oldVnode.elm.parentNode,"old");
        if (oldVnode.elm.parentNode && newVnodeElm) {
            oldVnode.elm.parentNode.insertBefore(newVnodeElm, oldVnode.elm);
        }
        // 删除老节点
        oldVnode.elm.parentNode.removeChild(oldVnode.elm);
    }
};